// created by jay 1.1.0 (c) 2002-2006 ats@cs.rit.edu
// skeleton Java/pj2 1.1.0/2.0.0 (c) 2002-2008 ats@cs.rit.edu

// line 4 "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
// $Id: grammar.pj2 5 2008-12-19 00:19:40Z vic.fryzel $                                                                                                     
// Compiler Construction                                                                                                                                    
// Milestone 1: Recognition                                                                                                                                 
// Vic Fryzel <vef3240@rit.edu>                                                                                                                             

public class Parser {

	// line 13 "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
	/**
	 * maps symbol value to printable name.
	 * 
	 * @see #yyExpecting
	 */
	protected static final String[] yyNames = { "[eof]", null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			"\'%\'", null, null, "\'(\'", "\')\'", "\'*\'", "\'+\'", null,
			"\'-\'", null, "\'/\'", null, null, null, null, null, null, null,
			null, null, null, "\':\'", null, "\'<\'", "\'=\'", "\'>\'", null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, null, null, null, null, null, null,
			null, null, null, null, null, "error", "\'==\'", "\'!=\'",
			"\'&&\'", "\'||\'", "\'>=\'", "\'<=\'", "Number", "Id", "LitStr",
			"\'if\'", "\'end\'", "\'else\'", "\'while\'", "\'begin\'",
			"\'print\'" };
	// line 45 "-"
	// %token constants
	public static final int _258 = 258;
	public static final int _259 = 259;
	public static final int _267 = 267;
	public static final int _269 = 269;
	public static final int _257 = 257;
	public static final int _260 = 260;
	public static final int _261 = 261;
	public static final int _268 = 268;
	public static final int _271 = 271;
	public static final int _266 = 266;
	public static final int _262 = 262;
	public static final int _270 = 270;
	public static final int Number = 263;
	public static final int Id = 264;
	public static final int LitStr = 265;
	public static final int empty = 272;
	public static final int yyErrorCode = 256;

	/**
	 * number of final state.
	 */
	protected static final int yyFinal = 7;

	/**
	 * parser tables. Order is mandated by <i>jay</i>.
	 */
	protected static final short[] yyLhs = {
			// yyLhs 60
			-1, 1, 1, 0, 2, 2, 2, 2, 2, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9,
			10, 11, 11, 12, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
			14, 14, 14, 14, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
			27, 28, 29, 30, }, yyLen = {
			// yyLen 60
			2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 2, 5, 5, 1, 2, 4, 1, 2,
			5, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
			1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, }, yyDefRed = {
			// yyDefRed 93
			0, 0, 0, 0, 0, 45, 9, 0, 0, 1, 4, 5, 6, 7, 8, 0, 27, 44, 59, 0, 0,
			28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 29, 0, 0,
			0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0,
			43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 55, 20, 0, 0, 0, 0, 25,
			24, 22, 21, 0, 12, 15, 16, 14, 0, 17, 0, 19, 18, }, yyDgoto = {
			// yyDgoto 31
			7, 8, 9, 10, 77, 78, 11, 90, 85, 75, 12, 58, 13, 14, 20, 21, 15,
			22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, },
			yySindex = {
					// yySindex 93
					-257, -29, -29, -29, -55, 0, 0, 0, -257, 0, 0, 0, 0, 0, 0,
					-44, 0, 0, 0, -29, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 432, -13, -257, 0, -29, 425, -29, -29, -29, -29,
					-29, -29, -29, -29, -29, -29, -29, -29, -29, -257, -257, 0,
					-115, 432, 0, 154, 170, 154, 170, -42, -42, 436, 436, -21,
					-58, -58, 0, 0, 0, -99, 0, 252, 261, 0, 0, 0, 0, -36, 0, 0,
					0, 0, -257, 0, 270, 0, 0, }, yyRindex = {
					// yyRindex 93
					0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 189, 0, 153, 121, 169, 137, 1, 19, 89, 105, 73, 37, 55,
					0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, }, yyGindex = {
					// yyGindex 31
					0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, yyTable = {
					// yyTable 699
					52, 54, 54, 38, 53, 50, 48, 5, 49, 3, 51, 19, 1, 4, 2, 6,
					52, 40, 54, 56, 53, 55, 88, 54, 52, 53, 51, 3, 0, 50, 48,
					0, 49, 0, 51, 0, 0, 49, 54, 54, 39, 53, 54, 54, 54, 56, 54,
					54, 54, 53, 0, 0, 0, 0, 0, 50, 56, 0, 0, 54, 56, 56, 56, 0,
					56, 0, 56, 0, 0, 0, 57, 0, 0, 48, 49, 0, 0, 56, 49, 49, 49,
					0, 49, 0, 49, 0, 0, 74, 76, 46, 80, 0, 50, 0, 0, 49, 50,
					50, 50, 0, 50, 0, 50, 0, 0, 47, 0, 82, 0, 84, 87, 0, 0, 50,
					48, 48, 48, 0, 48, 0, 89, 57, 92, 0, 0, 0, 0, 0, 0, 0, 46,
					48, 46, 0, 46, 0, 11, 58, 11, 13, 11, 11, 11, 11, 11, 0,
					47, 46, 47, 5, 47, 3, 79, 52, 1, 4, 2, 6, 0, 0, 0, 0, 57,
					47, 0, 5, 0, 3, 81, 51, 1, 4, 2, 6, 0, 0, 0, 0, 58, 57, 26,
					0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 52, 0, 0, 52, 58, 50, 48, 0,
					49, 0, 51, 0, 46, 47, 0, 0, 52, 0, 0, 51, 52, 50, 48, 54,
					49, 53, 51, 0, 0, 44, 42, 43, 45, 46, 47, 0, 51, 0, 0, 54,
					0, 53, 0, 16, 17, 18, 0, 0, 0, 46, 47, 0, 0, 44, 42, 43,
					45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54,
					0, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 0, 56, 56, 56, 56,
					56, 56, 0, 56, 0, 56, 56, 56, 56, 56, 56, 56, 0, 0, 49, 49,
					49, 49, 0, 0, 0, 49, 0, 49, 49, 49, 49, 49, 49, 49, 0, 0,
					50, 50, 50, 50, 0, 0, 0, 50, 0, 50, 50, 50, 50, 50, 50, 50,
					0, 0, 48, 48, 48, 48, 0, 0, 0, 48, 0, 48, 48, 48, 48, 48,
					48, 48, 46, 46, 46, 46, 0, 0, 0, 46, 0, 46, 46, 46, 46, 46,
					46, 46, 47, 47, 47, 47, 0, 0, 0, 47, 0, 47, 47, 47, 47, 47,
					47, 47, 57, 57, 57, 57, 0, 0, 0, 57, 0, 57, 57, 57, 57, 57,
					57, 57, 58, 58, 58, 58, 0, 0, 0, 58, 0, 58, 58, 58, 58, 58,
					58, 58, 52, 52, 0, 43, 45, 46, 47, 52, 0, 52, 52, 52, 52,
					52, 52, 52, 51, 51, 0, 0, 0, 46, 47, 51, 0, 51, 51, 51, 51,
					51, 51, 51, 0, 0, 26, 0, 26, 26, 26, 26, 26, 26, 26, 10, 0,
					10, 10, 10, 10, 10, 10, 10, 52, 36, 37, 0, 60, 50, 48, 52,
					49, 0, 51, 52, 50, 48, 0, 49, 50, 51, 41, 0, 0, 51, 0, 54,
					0, 53, 0, 0, 0, 0, 54, 0, 53, 0, 54, 0, 53, 0, 0, 59, 0,
					61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 5, 0,
					3, 0, 83, 1, 4, 2, 6, 5, 0, 3, 86, 0, 1, 4, 2, 6, 5, 0, 3,
					91, 0, 1, 4, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
					0, 0, 0, 0, 0, 0, 44, 42, 43, 45, 46, 47, 0, 44, 42, 43,
					45, 46, 47, 0, 0, 46, 47, }, yyCheck = {
					// yyCheck 699
					37, 0, 60, 58, 62, 42, 43, 264, 45, 266, 47, 40, 269, 270,
					271, 272, 37, 61, 60, 0, 62, 58, 58, 60, 37, 62, 47, 0, -1,
					42, 43, -1, 45, -1, 47, -1, -1, 0, 37, 60, 8, 62, 41, 42,
					43, 58, 45, 60, 47, 62, -1, -1, -1, -1, -1, 0, 37, -1, -1,
					58, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, 38, -1, -1, 0,
					37, -1, -1, 58, 41, 42, 43, -1, 45, -1, 47, -1, -1, 55, 56,
					0, 58, -1, 37, -1, -1, 58, 41, 42, 43, -1, 45, -1, 47, -1,
					-1, 0, -1, 75, -1, 77, 78, -1, -1, 58, 41, 42, 43, -1, 45,
					-1, 88, 0, 90, -1, -1, -1, -1, -1, -1, -1, 41, 58, 43, -1,
					45, -1, 264, 0, 266, 267, 268, 269, 270, 271, 272, -1, 41,
					58, 43, 264, 45, 266, 267, 0, 269, 270, 271, 272, -1, -1,
					-1, -1, 41, 58, -1, 264, -1, 266, 267, 0, 269, 270, 271,
					272, -1, -1, -1, -1, 41, 58, 0, -1, -1, -1, -1, -1, -1, -1,
					-1, 0, -1, 37, -1, -1, 41, 58, 42, 43, -1, 45, -1, 47, -1,
					261, 262, -1, -1, 37, -1, -1, 41, 58, 42, 43, 60, 45, 62,
					47, -1, -1, 257, 258, 259, 260, 261, 262, -1, 58, -1, -1,
					60, -1, 62, -1, 263, 264, 265, -1, -1, -1, 261, 262, -1,
					-1, 257, 258, 259, 260, 261, 262, -1, -1, -1, -1, -1, -1,
					-1, -1, 257, 258, 259, 260, 261, 262, -1, 264, -1, 266,
					267, 268, 269, 270, 271, 272, -1, -1, 257, 258, 259, 260,
					261, 262, -1, 264, -1, 266, 267, 268, 269, 270, 271, 272,
					-1, -1, 257, 258, 259, 260, -1, -1, -1, 264, -1, 266, 267,
					268, 269, 270, 271, 272, -1, -1, 257, 258, 259, 260, -1,
					-1, -1, 264, -1, 266, 267, 268, 269, 270, 271, 272, -1, -1,
					257, 258, 259, 260, -1, -1, -1, 264, -1, 266, 267, 268,
					269, 270, 271, 272, 257, 258, 259, 260, -1, -1, -1, 264,
					-1, 266, 267, 268, 269, 270, 271, 272, 257, 258, 259, 260,
					-1, -1, -1, 264, -1, 266, 267, 268, 269, 270, 271, 272,
					257, 258, 259, 260, -1, -1, -1, 264, -1, 266, 267, 268,
					269, 270, 271, 272, 257, 258, 259, 260, -1, -1, -1, 264,
					-1, 266, 267, 268, 269, 270, 271, 272, 257, 258, -1, 259,
					260, 261, 262, 264, -1, 266, 267, 268, 269, 270, 271, 272,
					257, 258, -1, -1, -1, 261, 262, 264, -1, 266, 267, 268,
					269, 270, 271, 272, -1, -1, 264, -1, 266, 267, 268, 269,
					270, 271, 272, 264, -1, 266, 267, 268, 269, 270, 271, 272,
					37, 2, 3, -1, 41, 42, 43, 37, 45, -1, 47, 37, 42, 43, -1,
					45, 42, 47, 19, -1, -1, 47, -1, 60, -1, 62, -1, -1, -1, -1,
					60, -1, 62, -1, 60, -1, 62, -1, -1, 40, -1, 42, 43, 44, 45,
					46, 47, 48, 49, 50, 51, 52, 53, 54, 264, -1, 266, -1, 268,
					269, 270, 271, 272, 264, -1, 266, 267, -1, 269, 270, 271,
					272, 264, -1, 266, 267, -1, 269, 270, 271, 272, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
					-1, 257, 258, 259, 260, 261, 262, -1, 257, 258, 259, 260,
					261, 262, -1, -1, 261, 262, };

	// t /** printable rules for debugging.
	// t */
	// t protected static final java.lang.String [] yyRule = {
	// t "$accept : program",
	// t "yy.1 : stmt",
	// t "yy.1 : yy.1 stmt",
	// t "program : yy.1",
	// t "stmt : assn",
	// t "stmt : select",
	// t "stmt : loop",
	// t "stmt : begin",
	// t "stmt : print",
	// t "stmt : empty",
	// t "assn : varName '=' expr",
	// t "yy.2 : stmt",
	// t "yy.2 : yy.2 stmt",
	// t "yy.3 : stmt",
	// t "yy.3 : yy.3 stmt",
	// t "select : _266 expr ':' yy.2 selectElse",
	// t "select : _266 expr ':' yy.3 _267",
	// t "yy.4 : stmt",
	// t "yy.4 : yy.4 stmt",
	// t "selectElse : _268 ':' yy.4 _267",
	// t "yy.5 : stmt",
	// t "yy.5 : yy.5 stmt",
	// t "loop : _269 expr ':' yy.5 _267",
	// t "yy.6 : stmt",
	// t "yy.6 : yy.6 stmt",
	// t "begin : _270 ':' yy.6 _267",
	// t "print : _271 expr",
	// t "expr : Number",
	// t "expr : var",
	// t "expr : str",
	// t "expr : sum",
	// t "expr : dif",
	// t "expr : mul",
	// t "expr : div",
	// t "expr : mod",
	// t "expr : eq",
	// t "expr : neq",
	// t "expr : gt",
	// t "expr : gte",
	// t "expr : lt",
	// t "expr : lte",
	// t "expr : and",
	// t "expr : or",
	// t "expr : '(' expr ')'",
	// t "var : Id",
	// t "varName : Id",
	// t "sum : expr '+' expr",
	// t "dif : expr '-' expr",
	// t "mul : expr '*' expr",
	// t "div : expr '/' expr",
	// t "mod : expr '%' expr",
	// t "eq : expr _257 expr",
	// t "neq : expr _258 expr",
	// t "gt : expr '>' expr",
	// t "gte : expr _261 expr",
	// t "lt : expr '<' expr",
	// t "lte : expr _262 expr",
	// t "and : expr _259 expr",
	// t "or : expr _260 expr",
	// t "str : LitStr",
	// t };
	// t
	// t /** index-checked interface to {@link #yyNames}.
	// t @param token single character or <tt>%token</tt> value.
	// t @return token name or <tt>[illegal]</tt> or <tt>[unknown]</tt>.
	// t */
	// t public static final java.lang.String yyName (int token) {
	// t if (token < 0 || token > yyNames.length) return "[illegal]";
	// t java.lang.String name;
	// t if ((name = yyNames[token]) != null) return name;
	// t return "[unknown]";
	// t }
	// t
	/**
	 * thrown for irrecoverable syntax errors and stack overflow. Nested for
	 * convenience, does not depend on parser class.
	 */
	public static class yyException extends java.lang.Exception {
		public yyException(java.lang.String message) {
			super(message);
		}
	}

	/**
	 * must be implemented by a scanner object to supply input to the parser.
	 * Nested for convenience, does not depend on parser class.
	 */
	public interface yyInput {

		/**
		 * move on to next token.
		 * 
		 * @return <tt>false</tt> if positioned beyond tokens.
		 * @throws IOException
		 *             on input error.
		 */
		boolean advance() throws java.io.IOException;

		/**
		 * classifies current token. Should not be called if {@link #advance()}
		 * returned <tt>false</tt>.
		 * 
		 * @return current <tt>%token</tt> or single character.
		 */
		int token();

		/**
		 * associated with current token. Should not be called if
		 * {@link #advance()} returned <tt>false</tt>.
		 * 
		 * @return value for {@link #token()}.
		 */
		java.lang.Object value();

		/**
		 * should return a position indication for parser error messages.
		 */
		java.lang.String toString();
	}

	/**
	 * simplified error message.
	 * 
	 * @see #yyerror(java.lang.String, java.lang.String[])
	 */
	public void yyerror(java.lang.String message) {
		yyerror(message, null);
	}

	/**
	 * (syntax) error message. Can be overwritten to control message format.
	 * 
	 * @param message
	 *            text to be displayed.
	 * @param expected
	 *            list of acceptable tokens, if available.
	 */
	public void yyerror(java.lang.String message, java.lang.String[] expected) {
		if (expected != null && expected.length > 0) {
			System.err.print(message + ", expecting");
			for (int n = 0; n < expected.length; ++n)
				System.err.print(" " + expected[n]);
			System.err.println();
		} else
			System.err.println(message);
	}

	/**
	 * computes list of expected tokens on error by tracing the tables.
	 * 
	 * @param state
	 *            for which to compute the list.
	 * @return list of token names.
	 */
	protected java.lang.String[] yyExpecting(int state) {
		int token, n, len = 0;
		boolean[] ok = new boolean[yyNames.length];

		if ((n = yySindex[state]) != 0)
			for (token = n < 0 ? -n : 0; token < yyNames.length
					&& n + token < yyTable.length; ++token)
				if (yyCheck[n + token] == token && !ok[token]
						&& yyNames[token] != null) {
					++len;
					ok[token] = true;
				}
		if ((n = yyRindex[state]) != 0)
			for (token = n < 0 ? -n : 0; token < yyNames.length
					&& n + token < yyTable.length; ++token)
				if (yyCheck[n + token] == token && !ok[token]
						&& yyNames[token] != null) {
					++len;
					ok[token] = true;
				}

		java.lang.String result[] = new java.lang.String[len];
		for (n = token = 0; n < len; ++token)
			if (ok[token])
				result[n++] = yyNames[token];
		return result;
	}

	/**
	 * initial size and increment of the state/value stack [default 256]. This
	 * is not final so that it can be overwritten outside of invocations of
	 * {@link #yyparse}.
	 */
	protected int yyMax;

	/**
	 * executed at the beginning of a reduce action. Used as
	 * <tt>$$ = yyDefault($1)</tt>, prior to the user-specified action, if any.
	 * Can be overwritten to provide deep copy, etc.
	 * 
	 * @param first
	 *            value for <tt>$1</tt>, or <tt>null</tt>.
	 * @return first.
	 */
	protected java.lang.Object yyDefault(java.lang.Object first) {
		return first;
	}

	/**
	 * the generated parser. Maintains a dynamic state and value stack.
	 * 
	 * @param yyLex
	 *            scanner.
	 * @param yyarg
	 *            [0] debug message writer implementing <tt>yyDebug</tt>, and/or
	 *            tree builder for <tt>yybuild()</tt>.
	 * @return result of the last reduction, if any.
	 * @throws yyException
	 *             on irrecoverable parse error.
	 */
	public java.lang.Object yyparse(yyInput yyLex, java.lang.Object... yyarg)
			throws java.io.IOException, yyException {
		java.lang.Object yyBuilder = yyarg.length > 0 ? yyarg[0] : null;
		// t jay.yydebug.yyDebug yydebug = yyBuilder instanceof
		// jay.yydebug.yyDebug
		// t ? (jay.yydebug.yyDebug)yyBuilder : null;
		if (yyMax <= 0)
			yyMax = 256; // initial size
		int yyState = 0, yyStates[] = new int[yyMax]; // state stack
		java.lang.Object yyVal = null, yyVals[] = new java.lang.Object[yyMax]; // value
		// stack
		int yyToken = -1; // current input
		int yyErrorFlag = 0; // #tokens to shift

		yyLoop: for (int yyTop = 0;; ++yyTop) {
			if (yyTop >= yyStates.length) { // dynamically increase
				int[] i = new int[yyStates.length + yyMax];
				System.arraycopy(yyStates, 0, i, 0, yyStates.length);
				yyStates = i;
				java.lang.Object[] o = new java.lang.Object[yyVals.length
						+ yyMax];
				System.arraycopy(yyVals, 0, o, 0, yyVals.length);
				yyVals = o;
			}
			yyStates[yyTop] = yyState;
			yyVals[yyTop] = yyVal;
			// t if (yydebug != null) yydebug.push(yyState, yyVal);

			yyDiscarded: for (;;) { // discarding a token does not change stack
				int yyN;
				if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce
					// (yyN)
					if (yyToken < 0) {
						yyToken = yyLex.advance() ? yyLex.token() : 0;
						// t if (yydebug != null)
						// t yydebug.lex(yyState, yyToken, yyName(yyToken),
						// yyLex.value());
					}
					if ((yyN = yySindex[yyState]) != 0 && (yyN += yyToken) >= 0
							&& yyN < yyTable.length && yyCheck[yyN] == yyToken) {
						// t if (yydebug != null)
						// t yydebug.shift(yyState, yyTable[yyN], yyErrorFlag >
						// 0 ? yyErrorFlag-1 : 0);
						yyState = yyTable[yyN]; // shift to yyN
						yyVal = yyLex.value();
						yyToken = -1;
						if (yyErrorFlag > 0)
							--yyErrorFlag;
						continue yyLoop;
					}
					if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
							&& yyN < yyTable.length && yyCheck[yyN] == yyToken)
						yyN = yyTable[yyN]; // reduce (yyN)
					else
						switch (yyErrorFlag) {

						case 0:
							yyerror(yyLex + ": syntax error",
									yyExpecting(yyState));
							// t if (yydebug != null)
							// yydebug.error(yyLex+": syntax error");

						case 1:
						case 2:
							yyErrorFlag = 3;
							do {
								if ((yyN = yySindex[yyStates[yyTop]]) != 0
										&& (yyN += yyErrorCode) >= 0
										&& yyN < yyTable.length
										&& yyCheck[yyN] == yyErrorCode) {
									// t if (yydebug != null)
									// t yydebug.shift(yyStates[yyTop],
									// yyTable[yyN], 3);
									yyState = yyTable[yyN];
									yyVal = yyLex.value();
									continue yyLoop;
								}
								// t if (yydebug != null)
								// yydebug.pop(yyStates[yyTop]);
							} while (--yyTop >= 0);
							// t if (yydebug != null) yydebug.reject();
							throw new yyException(yyLex
									+ ": irrecoverable syntax error");

						case 3:
							if (yyToken == 0) {
								// t if (yydebug != null) yydebug.reject();
								throw new yyException(
										"at end-of-file: irrecoverable syntax error");
							}
							// t if (yydebug != null)
							// t yydebug.discard(yyState, yyToken,
							// yyName(yyToken), yyLex.value());
							yyToken = -1;
							continue yyDiscarded; // leave stack alone
						}
				}
				int yyV = yyTop + 1 - yyLen[yyN];
				// t if (yydebug != null)
				// t yydebug.reduce(yyState, yyStates[yyV-1], yyN, yyRule[yyN],
				// yyLen[yyN]);
				yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
				switch (yyN) {
				case 1:
					// line 107
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.1",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 2:
					// line 108
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.1",
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 3:
					// line 109
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "program",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 4:
					// line 110
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "stmt",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 5:
					// line 111
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "stmt",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 6:
					// line 112
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "stmt",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 7:
					// line 113
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "stmt",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 8:
					// line 114
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "stmt",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 9:
					// line 115
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "stmt", yyVals[0 + yyTop]);
				}
					break;
				case 10:
					// line 116
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "assn",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 11:
					// line 117
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.2",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 12:
					// line 118
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.2",
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 13:
					// line 119
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.3",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 14:
					// line 120
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.3",
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 15:
					// line 121
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "select",
							((java.lang.Object) yyVals[-3 + yyTop]),
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 16:
					// line 122
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "select",
							((java.lang.Object) yyVals[-3 + yyTop]),
							((java.lang.Object) yyVals[-1 + yyTop]));
				}
					break;
				case 17:
					// line 123
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.4",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 18:
					// line 124
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.4",
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 19:
					// line 125
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "selectElse",
							((java.lang.Object) yyVals[-1 + yyTop]));
				}
					break;
				case 20:
					// line 126
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.5",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 21:
					// line 127
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.5",
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 22:
					// line 128
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "loop",
							((java.lang.Object) yyVals[-3 + yyTop]),
							((java.lang.Object) yyVals[-1 + yyTop]));
				}
					break;
				case 23:
					// line 129
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.6",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 24:
					// line 130
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "yy.6",
							((java.lang.Object) yyVals[-1 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 25:
					// line 131
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "begin",
							((java.lang.Object) yyVals[-1 + yyTop]));
				}
					break;
				case 26:
					// line 132
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "print",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 27:
					// line 133
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((Integer) yyVals[0 + yyTop]));
				}
					break;
				case 28:
					// line 134
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 29:
					// line 135
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 30:
					// line 136
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 31:
					// line 137
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 32:
					// line 138
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 33:
					// line 139
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 34:
					// line 140
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 35:
					// line 141
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 36:
					// line 142
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 37:
					// line 143
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 38:
					// line 144
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 39:
					// line 145
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 40:
					// line 146
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 41:
					// line 147
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 42:
					// line 148
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 43:
					// line 149
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "expr",
							((java.lang.Object) yyVals[-1 + yyTop]));
				}
					break;
				case 44:
					// line 150
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "var",
							((String) yyVals[0 + yyTop]));
				}
					break;
				case 45:
					// line 151
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "varName",
							((String) yyVals[0 + yyTop]));
				}
					break;
				case 46:
					// line 152
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "sum",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 47:
					// line 153
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "dif",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 48:
					// line 154
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "mul",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 49:
					// line 155
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "div",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 50:
					// line 156
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "mod",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 51:
					// line 157
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "eq",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 52:
					// line 158
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "neq",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 53:
					// line 159
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "gt",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 54:
					// line 160
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "gte",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 55:
					// line 161
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "lt",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 56:
					// line 162
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "lte",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 57:
					// line 163
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "and",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 58:
					// line 164
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "or",
							((java.lang.Object) yyVals[-2 + yyTop]),
							((java.lang.Object) yyVals[0 + yyTop]));
				}
					break;
				case 59:
					// line 165
					// "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"
				{
					yyVal = yybuild(yyLex, yyBuilder, "str",
							((String) yyVals[0 + yyTop]));
				}
					break;
				// line 792 "-"
				}
				yyTop -= yyLen[yyN];
				yyState = yyStates[yyTop];
				int yyM = yyLhs[yyN];
				if (yyState == 0 && yyM == 0) {
					// t if (yydebug != null) yydebug.shift(0, yyFinal);
					yyState = yyFinal;
					if (yyToken < 0) {
						yyToken = yyLex.advance() ? yyLex.token() : 0;
						// t if (yydebug != null)
						// t yydebug.lex(yyState, yyToken,yyName(yyToken),
						// yyLex.value());
					}
					if (yyToken == 0) {
						// t if (yydebug != null) yydebug.accept(yyVal);
						return yyVal;
					}
					continue yyLoop;
				}
				if ((yyN = yyGindex[yyM]) != 0 && (yyN += yyState) >= 0
						&& yyN < yyTable.length && yyCheck[yyN] == yyState)
					yyState = yyTable[yyN];
				else
					yyState = yyDgoto[yyM];
				// t if (yydebug != null) yydebug.shift(yyStates[yyTop],
				// yyState);
				continue yyLoop;
			}
		}
	}

	// line 168 "/Library/Tomcat/webapps/wcs/WEB-INF/tmp/job7252/y.input"

	/**
	 * if true, <tt>null</tt> will be stored when a totally empty alternative is
	 * reduced.
	 */
	public boolean yyAddNull = false;

	/**
	 * executed whenever an empty alternative of a rule is reduced. If
	 * {@link #yyAddNull} is true, sends <tt>null</tt> to {@link #yybuild}.
	 */
	protected java.lang.Object yybuild0(yyInput yyLex,
			java.lang.Object builder, java.lang.String rule) {
		return yyAddNull ? yybuild(yyLex, builder, rule,
				(java.lang.Object) null) : new java.util.ArrayList(); // flattened
		// by
		// parent
	}

	/**
	 * executed whenever an alternative of a rule is reduced, called with values
	 * corresponding to {@link pj2.Parser.Id Id} arguments only.
	 * <tt>ArrayList</tt> arguments are flattened, others are not.
	 * <p>
	 * Silently filter by invoking <tt>builder.<i>rulename</i>(int,List)</tt> or
	 * <tt>builder.<i>rulename</i>(List)</tt>, if either, with the current
	 * scanner position and the flattened argument list.
	 * 
	 * @return result value from builder or flattened argument list.
	 */
	@SuppressWarnings("unchecked")
	protected java.lang.Object yybuild(yyInput yyLex, java.lang.Object builder,
			java.lang.String rule, java.lang.Object... arg) {
		java.util.List result = new java.util.ArrayList();
		// flatten ArrayList arg but not List arg
		for (java.lang.Object a : arg)
			if (a instanceof java.util.ArrayList)
				result.addAll((java.util.ArrayList) a);
			else
				result.add(a);

		// silently filter
		try { // with position
			int position = (java.lang.Integer) yyLex.getClass().getMethod(
					"position").invoke(yyLex);
			return builder.getClass().getMethod(rule, int.class,
					java.util.List.class).invoke(builder, position, result);
		} catch (java.lang.reflect.InvocationTargetException e) {
			throw new java.lang.RuntimeException("exception in builder",
					(java.lang.Throwable) e.getTargetException());
		} catch (java.lang.Exception any) {

			try { // without position
				return builder.getClass().getMethod(rule, java.util.List.class)
						.invoke(builder, result);
			} catch (java.lang.reflect.InvocationTargetException e) {
				throw new java.lang.RuntimeException("exception in builder",
						(java.lang.Throwable) e.getTargetException());
			} catch (java.lang.Exception e) {
				return result;
			}
		}
	}

	/**
	 * main program to test parser. Does not need to know the name of the parser
	 * class, but assumes that the scanner class is static, named
	 * <tt>yyLex<tt>, and is immediately nested
      into the parser class.
	 */
	public static void main(java.lang.String... arg) {
		yyInput scanner = new yyLex(System.in);
		try {
			java.lang.Object parser = scanner.getClass().getEnclosingClass()
					.newInstance();
			// arg[0]: if specified, toggle null storage
			if (arg != null && arg.length > 0) {
				java.lang.reflect.Field yyAddNull = parser.getClass().getField(
						"yyAddNull");
				yyAddNull.setBoolean(parser,
						yyAddNull.getBoolean(parser) ^ true);
			}
			// build tree, dump
			java.lang.Object tree = parser.getClass().getMethod(
					"yyparse",
					new java.lang.Class[] { yyInput.class,
							java.lang.Object[].class }).invoke(parser, scanner,
					new java.lang.Object[] { new yyTree() });
			pj2.Dump.dump(new java.io.PrintWriter(System.out, true), "", tree);
		} catch (java.lang.NoSuchFieldException e) {
			System.err.println("cannot create parser [" + e + "]");
			System.exit(1);
		} catch (java.lang.InstantiationException e) {
			System.err.println("cannot create parser [" + e + "]");
			System.exit(1);
		} catch (java.lang.IllegalAccessException e) {
			System.err.println("cannot create parser [" + e + "]");
			System.exit(1);
		} catch (java.lang.NoSuchMethodException e) {
			System.err.println("cannot create parser [" + e + "]");
			System.exit(1);
		} catch (java.lang.reflect.InvocationTargetException e) {
			System.err.println("parse error [" + e + "]");
			System.exit(1);
		}
	}

	// JLex 1.2.6 (c) 1996-2003 by Elliot Joel Berk and C. Scott Ananian
	public static// created by pj2.Gen 2.0.0/2.0.0 (c) 2008
	// axel.schreiner@rit.edu
	class yyLex implements yyInput {
		private final int YY_BUFFER_SIZE = 512;
		private final int YY_F = -1;
		private final int YY_NO_STATE = -1;
		private final int YY_NOT_ACCEPT = 0;
		private final int YY_START = 1;
		private final int YY_END = 2;
		private final int YY_NO_ANCHOR = 4;
		private final int YY_BOL = 128;
		private final int YY_EOF = 129;

		/**
		 * main program, generates and tests a scanner on standard input.
		 */
		public static void main(java.lang.String[] args)
				throws java.io.IOException {
			main(new yyLex(System.in));
		}

		/**
		 * scanner test driver.
		 */
		public static void main(yyInput scanner) throws java.io.IOException {
			System.out.println("scanner\t\ttoken\tvalue");
			while (scanner.advance()) {
				java.lang.StringBuffer s = new java.lang.StringBuffer();
				s.append(scanner).append('\t');
				try { // legal token values are mapped in yyNames
					s.append(yyNames[scanner.token()].toString());
				} catch (java.lang.Exception e) { // illegals are numbers
					s.append(scanner.token());
				}
				try { // suppress null
					s.append("\t" + visible(scanner.value().toString()));
				} catch (java.lang.Exception e) {
				}
				System.out.println(s);
			}
		}

		/**
		 * position for error message.
		 */
		public java.lang.String toString() {
			java.lang.String token = yytext();
			return "("
					+ position()
					+ ")"
					+ (token != null && token.length() > 0 ? " at \""
							+ visible(token) + "\"" : "");
		}

		/**
		 * returned by {@link #token()}.
		 */
		protected int token;

		/**
		 * current input symbol.
		 */
		public int token() {
			return token;
		}

		/**
		 * returned by {@link #value()}.
		 */
		protected java.lang.Object value;

		/**
		 * null or object associated with current input symbol.
		 */
		public java.lang.Object value() {
			return value;
		}

		/**
		 * current line number, based at 1.
		 */
		public int position() {
			return yyline + 1;
		}

		/**
		 * return a <i>JLex</i>-style visible rendering of a string.
		 */
		public static java.lang.String visible(java.lang.String s) {
			if (s == null)
				return "[null]";
			java.lang.StringBuffer b = new java.lang.StringBuffer();
			for (int n = 0; n < s.length(); ++n) {
				char ch = s.charAt(n);
				switch (ch) {
				case '\b':
					b.append("\\b");
					continue;
				case '\f':
					b.append("\\f");
					continue;
				case '\n':
					b.append("\\n");
					continue;
				case '\r':
					b.append("\\r");
					continue;
				case '\t':
					b.append("\\t");
					continue;
				case '\'':
					b.append("\\'");
					continue;
				case '\"':
					b.append("\\\"");
					continue;
				case '\\':
					b.append("\\\\");
					continue;
				}
				if (ch < 26)
					b.append("\\^").append((char) ('A' + ch));
				else if (ch < ' ')
					b.append("\\3").append((char) ('0' + ch - 24));
				else if (ch <= '~')
					b.append(ch);
				else if (ch <= 0377)
					b.append("\\").append(java.lang.Integer.toOctalString(ch));
				else if (ch <= 0x1000)
					b.append("\\u0").append(java.lang.Integer.toHexString(ch));
				else
					b.append("\\u").append(java.lang.Integer.toHexString(ch));
			}
			return b.toString();
		}

		private java.io.BufferedReader yy_reader;
		private int yy_buffer_index;
		private int yy_buffer_read;
		private int yy_buffer_start;
		private int yy_buffer_end;
		private char yy_buffer[];
		private int yyline;
		private boolean yy_at_bol;
		private int yy_lexical_state;

		public yyLex(java.io.Reader reader) {
			this();
			if (null == reader) {
				throw (new Error("Error: Bad input stream initializer."));
			}
			yy_reader = new java.io.BufferedReader(reader);
		}

		public yyLex(java.io.InputStream instream) {
			this();
			if (null == instream) {
				throw (new Error("Error: Bad input stream initializer."));
			}
			yy_reader = new java.io.BufferedReader(
					new java.io.InputStreamReader(instream));
		}

		private yyLex() {
			yy_buffer = new char[YY_BUFFER_SIZE];
			yy_buffer_read = 0;
			yy_buffer_index = 0;
			yy_buffer_start = 0;
			yy_buffer_end = 0;
			yyline = 0;
			yy_at_bol = true;
			yy_lexical_state = YYINITIAL;
		}

		private boolean yy_eof_done = false;
		private final int YYINITIAL = 0;
		private final int yy_state_dtrans[] = { 0 };

		private void yybegin(int state) {
			yy_lexical_state = state;
		}

		private int yy_advance() throws java.io.IOException {
			int next_read;
			int i;
			int j;

			if (yy_buffer_index < yy_buffer_read) {
				return yy_buffer[yy_buffer_index++];
			}

			if (0 != yy_buffer_start) {
				i = yy_buffer_start;
				j = 0;
				while (i < yy_buffer_read) {
					yy_buffer[j] = yy_buffer[i];
					++i;
					++j;
				}
				yy_buffer_end = yy_buffer_end - yy_buffer_start;
				yy_buffer_start = 0;
				yy_buffer_read = j;
				yy_buffer_index = j;
				next_read = yy_reader.read(yy_buffer, yy_buffer_read,
						yy_buffer.length - yy_buffer_read);
				if (-1 == next_read) {
					return YY_EOF;
				}
				yy_buffer_read = yy_buffer_read + next_read;
			}

			while (yy_buffer_index >= yy_buffer_read) {
				if (yy_buffer_index >= yy_buffer.length) {
					yy_buffer = yy_double(yy_buffer);
				}
				next_read = yy_reader.read(yy_buffer, yy_buffer_read,
						yy_buffer.length - yy_buffer_read);
				if (-1 == next_read) {
					return YY_EOF;
				}
				yy_buffer_read = yy_buffer_read + next_read;
			}
			return yy_buffer[yy_buffer_index++];
		}

		private void yy_move_end() {
			if (yy_buffer_end > yy_buffer_start
					&& '\n' == yy_buffer[yy_buffer_end - 1])
				yy_buffer_end--;
			if (yy_buffer_end > yy_buffer_start
					&& '\r' == yy_buffer[yy_buffer_end - 1])
				yy_buffer_end--;
		}

		private boolean yy_last_was_cr = false;

		private void yy_mark_start() {
			int i;
			for (i = yy_buffer_start; i < yy_buffer_index; ++i) {
				if ('\n' == yy_buffer[i] && !yy_last_was_cr) {
					++yyline;
				}
				if ('\r' == yy_buffer[i]) {
					++yyline;
					yy_last_was_cr = true;
				} else
					yy_last_was_cr = false;
			}
			yy_buffer_start = yy_buffer_index;
		}

		private void yy_mark_end() {
			yy_buffer_end = yy_buffer_index;
		}

		private void yy_to_mark() {
			yy_buffer_index = yy_buffer_end;
			yy_at_bol = (yy_buffer_end > yy_buffer_start)
					&& ('\r' == yy_buffer[yy_buffer_end - 1]
							|| '\n' == yy_buffer[yy_buffer_end - 1]
							|| 2028/* LS */== yy_buffer[yy_buffer_end - 1] || 2029/* PS */== yy_buffer[yy_buffer_end - 1]);
		}

		private String yytext() {
			return (new String(yy_buffer, yy_buffer_start, yy_buffer_end
					- yy_buffer_start));
		}

		private int yylength() {
			return yy_buffer_end - yy_buffer_start;
		}

		private char[] yy_double(char buf[]) {
			int i;
			char newbuf[];
			newbuf = new char[2 * buf.length];
			for (i = 0; i < buf.length; ++i) {
				newbuf[i] = buf[i];
			}
			return newbuf;
		}

		private final int YY_E_INTERNAL = 0;
		private final int YY_E_MATCH = 1;
		private String yy_error_string[] = { "Error: Internal error.\n",
				"Error: Unmatched input.\n" };

		private void yy_error(int code, boolean fatal) {
			System.out.print(yy_error_string[code]);
			System.out.flush();
			if (fatal) {
				throw new Error("Fatal Error.\n");
			}
		}

		private int[][] unpackFromString(int size1, int size2, String st) {
			int colonIndex = -1;
			String lengthString;
			int sequenceLength = 0;
			int sequenceInteger = 0;

			int commaIndex;
			String workString;

			int res[][] = new int[size1][size2];
			for (int i = 0; i < size1; i++) {
				for (int j = 0; j < size2; j++) {
					if (sequenceLength != 0) {
						res[i][j] = sequenceInteger;
						sequenceLength--;
						continue;
					}
					commaIndex = st.indexOf(',');
					workString = (commaIndex == -1) ? st : st.substring(0,
							commaIndex);
					st = st.substring(commaIndex + 1);
					colonIndex = workString.indexOf(':');
					if (colonIndex == -1) {
						res[i][j] = Integer.parseInt(workString);
						continue;
					}
					lengthString = workString.substring(colonIndex + 1);
					sequenceLength = Integer.parseInt(lengthString);
					workString = workString.substring(0, colonIndex);
					sequenceInteger = Integer.parseInt(workString);
					res[i][j] = sequenceInteger;
					sequenceLength--;
				}
			}
			return res;
		}

		private int yy_acpt[] = {
		/* 0 */YY_NOT_ACCEPT,
		/* 1 */YY_NO_ANCHOR,
		/* 2 */YY_NO_ANCHOR,
		/* 3 */YY_NO_ANCHOR,
		/* 4 */YY_NO_ANCHOR,
		/* 5 */YY_NO_ANCHOR,
		/* 6 */YY_NO_ANCHOR,
		/* 7 */YY_NO_ANCHOR,
		/* 8 */YY_NO_ANCHOR,
		/* 9 */YY_NO_ANCHOR,
		/* 10 */YY_NO_ANCHOR,
		/* 11 */YY_NO_ANCHOR,
		/* 12 */YY_NO_ANCHOR,
		/* 13 */YY_NO_ANCHOR,
		/* 14 */YY_NO_ANCHOR,
		/* 15 */YY_NO_ANCHOR,
		/* 16 */YY_NO_ANCHOR,
		/* 17 */YY_NO_ANCHOR,
		/* 18 */YY_NO_ANCHOR,
		/* 19 */YY_NO_ANCHOR,
		/* 20 */YY_NOT_ACCEPT,
		/* 21 */YY_NO_ANCHOR,
		/* 22 */YY_NO_ANCHOR,
		/* 23 */YY_NO_ANCHOR,
		/* 24 */YY_NOT_ACCEPT,
		/* 25 */YY_NO_ANCHOR,
		/* 26 */YY_NO_ANCHOR,
		/* 27 */YY_NO_ANCHOR,
		/* 28 */YY_NOT_ACCEPT,
		/* 29 */YY_NO_ANCHOR,
		/* 30 */YY_NO_ANCHOR,
		/* 31 */YY_NOT_ACCEPT,
		/* 32 */YY_NO_ANCHOR,
		/* 33 */YY_NO_ANCHOR,
		/* 34 */YY_NO_ANCHOR,
		/* 35 */YY_NO_ANCHOR,
		/* 36 */YY_NO_ANCHOR,
		/* 37 */YY_NO_ANCHOR,
		/* 38 */YY_NO_ANCHOR,
		/* 39 */YY_NO_ANCHOR,
		/* 40 */YY_NO_ANCHOR,
		/* 41 */YY_NO_ANCHOR,
		/* 42 */YY_NO_ANCHOR,
		/* 43 */YY_NO_ANCHOR,
		/* 44 */YY_NO_ANCHOR,
		/* 45 */YY_NO_ANCHOR,
		/* 46 */YY_NO_ANCHOR,
		/* 47 */YY_NO_ANCHOR,
		/* 48 */YY_NO_ANCHOR,
		/* 49 */YY_NO_ANCHOR,
		/* 50 */YY_NO_ANCHOR };
		private int yy_cmap[] = unpackFromString(
				1,
				130,
				"23:9,24,21,23:2,21,23:18,24,1,27,22,23:2,3,29,23:8,25:10,23:2,18,2,12,23:2,"
						+ "26:26,23,28,23:2,26,23,26,19,26,6,4,17,20,8,9,26:2,10,26,5,26,14,26,15,13,1"
						+ "6,26:2,7,26:3,23,11,23:3,0:2")[0];

		private int yy_rmap[] = unpackFromString(1, 51,
				"0,1,2,3,4,5,6,1:3,7,1:4,7:5,8,9,10,8,11,12,13,14:2,15,16,17,18,19,20,21,1,2"
						+ "2,8,23,14,24,25,26,27,28,7,29,30,31,32")[0];

		private int yy_nxt[][] = unpackFromString(
				33,
				30,
				"1,2,21,25,3,46:2,48,46,22,46,29,32,46,49,46:3,34,50,46,4,5,36,4,6,46,38,36,"
						+ "40,-1:32,7,-1:31,46,26,46:4,30,-1:2,46:5,-1,46:2,-1:4,46:2,-1:24,4,-1:2,4,-"
						+ "1:6,5:20,-1,5:8,-1:25,6,-1:8,46:7,-1:2,46:5,-1,46:2,-1:4,46:2,-1:4,20:26,14"
						+ ",24,20,-1:2,8,-1:31,46:7,-1:2,46:4,10,-1,46:2,-1:4,46:2,-1:4,20:26,23,24,20"
						+ ",-1:3,9,-1:30,46:2,15,46:4,-1:2,46:5,-1,46:2,-1:4,46:2,-1:4,28:27,31,14,-1:"
						+ "11,11,-1:22,46:7,-1:2,37,46:4,-1,46:2,-1:4,46:2,-1:4,28:27,31,27,-1:2,12,-1"
						+ ":31,46:5,39,46,-1:2,46:5,-1,46:2,-1:4,46:2,-1:5,13,-1:31,46:7,-1:2,46:5,-1,"
						+ "46,42,-1:4,46:2,-1:7,16,46:6,-1:2,46:5,-1,46:2,-1:4,46:2,-1:7,46:6,43,-1:2,"
						+ "46:5,-1,46:2,-1:4,46:2,-1:7,46,44,46:5,-1:2,46:5,-1,46:2,-1:4,46:2,-1:7,46:"
						+ "5,45,46,-1:2,46:5,-1,46:2,-1:4,46:2,-1:7,17,46:6,-1:2,46:5,-1,46:2,-1:4,46:"
						+ "2,-1:7,46:7,-1:2,46:3,18,46,-1,46:2,-1:4,46:2,-1:7,46,19,46:5,-1:2,46:5,-1,"
						+ "46:2,-1:4,46:2,-1:7,46:5,41,46,-1:2,46:5,-1,46:2,-1:4,46:2,-1:7,46:4,33,46:"
						+ "2,-1:2,46:5,-1,46:2,-1:4,46:2,-1:7,46:7,-1:2,46:2,47,46:2,-1,46:2,-1:4,46:2"
						+ ",-1:7,35,46:6,-1:2,46:5,-1,46:2,-1:4,46:2,-1:3");

		public boolean advance() throws java.io.IOException {
			int yy_lookahead;
			int yy_anchor = YY_NO_ANCHOR;
			int yy_state = yy_state_dtrans[yy_lexical_state];
			int yy_next_state = YY_NO_STATE;
			int yy_last_accept_state = YY_NO_STATE;
			boolean yy_initial = true;
			int yy_this_accept;

			yy_mark_start();
			yy_this_accept = yy_acpt[yy_state];
			if (YY_NOT_ACCEPT != yy_this_accept) {
				yy_last_accept_state = yy_state;
				yy_mark_end();
			}
			while (true) {
				if (yy_initial && yy_at_bol)
					yy_lookahead = YY_BOL;
				else
					yy_lookahead = yy_advance();
				yy_next_state = YY_F;
				yy_next_state = yy_nxt[yy_rmap[yy_state]][yy_cmap[yy_lookahead]];
				if (YY_EOF == yy_lookahead && true == yy_initial) {

					return false;
				}
				if (YY_F != yy_next_state) {
					yy_state = yy_next_state;
					yy_initial = false;
					yy_this_accept = yy_acpt[yy_state];
					if (YY_NOT_ACCEPT != yy_this_accept) {
						yy_last_accept_state = yy_state;
						yy_mark_end();
					}
				} else {
					if (YY_NO_STATE == yy_last_accept_state) {
						throw (new Error("Lexical Error: Unmatched Input."));
					} else {
						yy_anchor = yy_acpt[yy_last_accept_state];
						if (0 != (YY_END & yy_anchor)) {
							yy_move_end();
						}
						yy_to_mark();
						switch (yy_last_accept_state) {
						case 1:

						case -2:
							break;
						case 2: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -3:
							break;
						case 3: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -4:
							break;
						case 4: {
						}
						case -5:
							break;
						case 5: {
						}
						case -6:
							break;
						case 6: {
							token = Number;
							value = new Integer(yytext());
							return true;
						}
						case -7:
							break;
						case 7: {
							token = _258;
							value = null;
							return true;
						}
						case -8:
							break;
						case 8: {
							token = _257;
							value = null;
							return true;
						}
						case -9:
							break;
						case 9: {
							token = _259;
							value = null;
							return true;
						}
						case -10:
							break;
						case 10: {
							token = _266;
							value = null;
							return true;
						}
						case -11:
							break;
						case 11: {
							token = _260;
							value = null;
							return true;
						}
						case -12:
							break;
						case 12: {
							token = _261;
							value = null;
							return true;
						}
						case -13:
							break;
						case 13: {
							token = _262;
							value = null;
							return true;
						}
						case -14:
							break;
						case 14: {
							token = LitStr;
							value = new String(yytext());
							return true;
						}
						case -15:
							break;
						case 15: {
							token = _267;
							value = null;
							return true;
						}
						case -16:
							break;
						case 16: {
							token = _268;
							value = null;
							return true;
						}
						case -17:
							break;
						case 17: {
							token = _269;
							value = null;
							return true;
						}
						case -18:
							break;
						case 18: {
							token = _271;
							value = null;
							return true;
						}
						case -19:
							break;
						case 19: {
							token = _270;
							value = null;
							return true;
						}
						case -20:
							break;
						case 21: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -21:
							break;
						case 22: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -22:
							break;
						case 23: {
							token = LitStr;
							value = new String(yytext());
							return true;
						}
						case -23:
							break;
						case 25: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -24:
							break;
						case 26: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -25:
							break;
						case 27: {
							token = LitStr;
							value = new String(yytext());
							return true;
						}
						case -26:
							break;
						case 29: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -27:
							break;
						case 30: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -28:
							break;
						case 32: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -29:
							break;
						case 33: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -30:
							break;
						case 34: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -31:
							break;
						case 35: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -32:
							break;
						case 36: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -33:
							break;
						case 37: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -34:
							break;
						case 38: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -35:
							break;
						case 39: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -36:
							break;
						case 40: {
							token = yytext().charAt(0);
							value = null;
							return true;
						}
						case -37:
							break;
						case 41: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -38:
							break;
						case 42: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -39:
							break;
						case 43: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -40:
							break;
						case 44: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -41:
							break;
						case 45: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -42:
							break;
						case 46: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -43:
							break;
						case 47: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -44:
							break;
						case 48: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -45:
							break;
						case 49: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -46:
							break;
						case 50: {
							token = Id;
							value = new String(yytext());
							return true;
						}
						case -47:
							break;
						default:
							yy_error(YY_E_INTERNAL, false);
						case -1:
						}
						yy_initial = true;
						yy_state = yy_state_dtrans[yy_lexical_state];
						yy_next_state = YY_NO_STATE;
						yy_last_accept_state = YY_NO_STATE;
						yy_mark_start();
						yy_this_accept = yy_acpt[yy_state];
						if (YY_NOT_ACCEPT != yy_this_accept) {
							yy_last_accept_state = yy_state;
							yy_mark_end();
						}
					}
				}
			}
		}
	}

	// created by pj2.Gen 2.0.0/2.0.0 (c) 2008 axel.schreiner@rit.edu
	/** tree factory */
	public static class yyTree implements java.io.Serializable {
		/** what each tree class will do. */
		public interface Visit {
			/** receive a visitor. */
			java.lang.Object visit(Visitor visitor);
		}

		/**
		 * what a visitor must do: receive each tree class separately.
		 */
		public interface Visitor {
			java.lang.Object visit(Program node);

			java.lang.Object visit(Statement node);

			java.lang.Object visit(Assign node);

			java.lang.Object visit(Select node);

			java.lang.Object visit(SelectElse node);

			java.lang.Object visit(Loop node);

			java.lang.Object visit(Begin node);

			java.lang.Object visit(Print node);

			java.lang.Object visit(Expression node);

			java.lang.Object visit(Var node);

			java.lang.Object visit(VarName node);

			java.lang.Object visit(Add node);

			java.lang.Object visit(Dif node);

			java.lang.Object visit(Mul node);

			java.lang.Object visit(Div node);

			java.lang.Object visit(Mod node);

			java.lang.Object visit(Eq node);

			java.lang.Object visit(Neq node);

			java.lang.Object visit(Gt node);

			java.lang.Object visit(Gte node);

			java.lang.Object visit(Lt node);

			java.lang.Object visit(Lte node);

			java.lang.Object visit(And node);

			java.lang.Object visit(Or node);

			java.lang.Object visit(Str node);

			/** hook for unknown classes. */
			java.lang.Object visit(Visit node);
		}

		/** factory method. */
		public Program program(int position, java.util.List args) {
			return new Program(position, args);
		}

		/** tree node class. */
		public static class Program extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Program(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Statement stmt(int position, java.util.List args) {
			return new Statement(position, args);
		}

		/** tree node class. */
		public static class Statement extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Statement(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Assign assn(int position, java.util.List args) {
			return new Assign(position, args);
		}

		/** tree node class. */
		public static class Assign extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Assign(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Select select(int position, java.util.List args) {
			return new Select(position, args);
		}

		/** tree node class. */
		public static class Select extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Select(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public SelectElse selectElse(int position, java.util.List args) {
			return new SelectElse(position, args);
		}

		/** tree node class. */
		public static class SelectElse extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected SelectElse(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Loop loop(int position, java.util.List args) {
			return new Loop(position, args);
		}

		/** tree node class. */
		public static class Loop extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Loop(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Begin begin(int position, java.util.List args) {
			return new Begin(position, args);
		}

		/** tree node class. */
		public static class Begin extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Begin(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Print print(int position, java.util.List args) {
			return new Print(position, args);
		}

		/** tree node class. */
		public static class Print extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Print(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Expression expr(int position, java.util.List args) {
			return new Expression(position, args);
		}

		/** tree node class. */
		public static class Expression extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Expression(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Var var(int position, java.util.List args) {
			return new Var(position, args);
		}

		/** tree node class. */
		public static class Var extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Var(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public VarName varName(int position, java.util.List args) {
			return new VarName(position, args);
		}

		/** tree node class. */
		public static class VarName extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected VarName(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Add sum(int position, java.util.List args) {
			return new Add(position, args);
		}

		/** tree node class. */
		public static class Add extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Add(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Dif dif(int position, java.util.List args) {
			return new Dif(position, args);
		}

		/** tree node class. */
		public static class Dif extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Dif(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Mul mul(int position, java.util.List args) {
			return new Mul(position, args);
		}

		/** tree node class. */
		public static class Mul extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Mul(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Div div(int position, java.util.List args) {
			return new Div(position, args);
		}

		/** tree node class. */
		public static class Div extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Div(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Mod mod(int position, java.util.List args) {
			return new Mod(position, args);
		}

		/** tree node class. */
		public static class Mod extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Mod(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Eq eq(int position, java.util.List args) {
			return new Eq(position, args);
		}

		/** tree node class. */
		public static class Eq extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Eq(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Neq neq(int position, java.util.List args) {
			return new Neq(position, args);
		}

		/** tree node class. */
		public static class Neq extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Neq(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Gt gt(int position, java.util.List args) {
			return new Gt(position, args);
		}

		/** tree node class. */
		public static class Gt extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Gt(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Gte gte(int position, java.util.List args) {
			return new Gte(position, args);
		}

		/** tree node class. */
		public static class Gte extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Gte(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Lt lt(int position, java.util.List args) {
			return new Lt(position, args);
		}

		/** tree node class. */
		public static class Lt extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Lt(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Lte lte(int position, java.util.List args) {
			return new Lte(position, args);
		}

		/** tree node class. */
		public static class Lte extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Lte(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public And and(int position, java.util.List args) {
			return new And(position, args);
		}

		/** tree node class. */
		public static class And extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected And(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Or or(int position, java.util.List args) {
			return new Or(position, args);
		}

		/** tree node class. */
		public static class Or extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Or(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}

		/** factory method. */
		public Str str(int position, java.util.List args) {
			return new Str(position, args);
		}

		/** tree node class. */
		public static class Str extends java.util.AbstractList implements
				java.io.Serializable, Visit {
			/* call class-specific method of visitor. */
			public java.lang.Object visit(Visitor visitor) {
				return visitor.visit(this);
			}

			/** associated input position. */
			public final int position;
			/** immutable body. */
			protected final java.lang.Object[] nodes;

			protected Str(int position, java.util.List args) {
				this.position = position;
				nodes = args.toArray();
			}

			public int size() {
				return nodes.length;
			}

			public java.lang.Object get(int n) {
				return nodes[n];
			}
		}
	}
}
// line 2293 "-"
